#
# ﻿Empresa desarrolladora: Fujitsu Technology Solutions S.A. - http://ts.fujitsu.com Felipe Munoz Castillo - 29/07/2013
#
# Autor: Junta de Andalucía
# Derechos de explotación propiedad de la Junta de Andalucía.
#
# Éste programa es software libre: usted tiene derecho a redistribuirlo y/o modificarlo bajo los términos de la Licencia EUPL European Public License publicada por el organismo IDABC de la Comisión Europea, en su versión 1.0. o posteriores.
#
# Éste programa se distribuye de buena fe, pero SIN NINGUNA GARANTÍA, incluso sin las presuntas garantías implícitas de USABILIDAD o ADECUACIÓN A PROPÓSITO CONCRETO. Para mas información consulte la Licencia EUPL European Public License.
#
# Usted recibe una copia de la Licencia EUPL European Public License junto con este programa, si por algún motivo no le es posible visualizarla, puede consultarla en la siguiente URL: http://ec.europa.eu/idabc/servlets/Docb4f4.pdf?id=31980
#
# You should have received a copy of the EUPL European Public License along with this program. If not, see
# http://ec.europa.eu/idabc/servlets/Docbb6d.pdf?id=31979
#
# Vous devez avoir reçu une copie de la EUPL European Public License avec ce programme. Si non, voir http://ec.europa.eu/idabc/servlets/Doc5a41.pdf?id=31983
#
# Sie erhalten eine Kopie der europäischen EUPL Public License zusammen mit diesem Programm. Wenn nicht, finden Sie da http://ec.europa.eu/idabc/servlets/Doc9dbe.pdf?id=31977
#
#

require File.dirname(__FILE__) + '/../../app/helpers/custom_field_dependent_helper'


module CustomFieldDependentHooks

  class CustomFieldDependentHooks < Redmine::Hook::ViewListener

    include CustomFieldDependentHelper


    # Caputra los custom fields antes de guardar y validar
    # para eliminar los que no tendrían que estar
    def update_issue_custom_fields(context)
       id_projecto = context[:issue].project_id
       
       custom_field_values=context[:issue].custom_field_values
       
       custom_field_dependents_map = get_custom_field_coditioned_map(id_projecto)

       to_delete= get_custom_fields_to_delete(custom_field_values, custom_field_dependents_map)

       context[:issue].custom_field_values.delete_if { |custom_field|
          to_delete.any? { |e| e==custom_field.custom_field_id }
       }

    end
     
    def controller_issues_new_before_save (context = {})
      update_issue_custom_fields(context)
    end

    def controller_issues_edit_before_save (context = {})
      update_issue_custom_fields(context)
    end



    # En este codigo tendriamos que meter un javascript
    # que cuando se cambien el valor de un campo recargador, oculte los que campos que no deberian
    # mostrarse, sustituyendo su valor por el carcater ascii 219
    def view_issues_form_details_top( context = {} )

      Rails.logger.debug('CustomFieldDependentHooks#view_issues_form_details_top: Filtrando los CustomFields segun dependencias en la operacion de edicion')

      id_projecto = context[:issue].project_id

      custom_field_dependents_map = get_custom_field_coditioned_map(id_projecto)

      salida = ''
      if (not custom_field_dependents_map.nil? and custom_field_dependents_map.size > 0)
        salida << "<script type=\"text/javascript\">\n"
        salida << "// <![CDATA[\n"
        salida << "managedCustomFieldDependentMap=#{custom_field_dependents_map.to_json};\n"
        salida << "idSelectPrefix = 'issue_custom_field_values_';\n"
        salida << "\n//]]>\n"
        salida << "</script>\n"
        salida << javascript_include_tag('manage_custom_field_dependent.js', :plugin => :custom_field_dependent)
      end

      return salida
    end

    # En este codigo unicamente tendriamos que ocultar los campos que no deberian aparecer
    # porque en caso de cambiar se actualizara por http
    # habria que hacer si se hace por javascript o por http
    def view_issues_show_details_bottom(context={})
      Rails.logger.info('CustomFieldDependentHooks#view_issues_show_details_bottom: Filtrando los CustomFields segun dependencias en la operacion consulta')

      id_projecto = context[:issue].project_id
       
      custom_field_values=context[:issue].custom_field_values
       
      custom_field_dependents_map = get_custom_field_coditioned_map(id_projecto)

      to_delete = get_custom_fields_to_delete(custom_field_values, custom_field_dependents_map)
      to_show = get_custom_fields_to_show(custom_field_values, custom_field_dependents_map)

      custom_fields_to_delete=CustomField.where("id IN (?)", to_delete)
      custom_fields_to_show=CustomField.where("id IN (?)", to_show)

      salida = ''
      if (not custom_field_dependents_map.nil? and custom_field_dependents_map.size > 0)
        salida << "<script type=\"text/javascript\">\n"
        salida << "// <![CDATA[\n"
        salida << "customFieldsToDeleteMap=#{custom_fields_to_delete.to_json};\n"
        salida << "customFieldsToShowMap=#{custom_fields_to_show.to_json};\n"
        salida << "idSelectPrefix = 'issue_custom_field_values_';\n"
        salida << "\n//]]>\n"
        salida << "</script>\n"
        salida << javascript_include_tag('delete_custom_field_dependent.js', :plugin => :custom_field_dependent)
      end
      return salida
    end
 
  end
end
